本文档定义 EOELAB 互联云是什么、由哪些实体组成、必须满足哪些约束与规范。
EOELAB 互联云是一个本地域优先的联邦计算系统,其核心观点是:
联邦系统基于以下默认假设构建:
我们是一个面向联邦基础设施与自治系统的技术社区。
我们鼓励:
我们不接受:
本地域是一个有唯一 Incus 控制面,能独立对外提供服务的本地Incus节点/集群。
本地域可以架构为:
注:双节点只能作为两个独立的单节点管理,不得建立集群。
coreNumber命名)是由 admin 团队长期维护、持续提供公共服务能力的本地域,这是为了保证 EOELAB 社区与联邦生态具备长期持续运行能力| 类型 | 技术 | 定位 | 说明 |
|---|---|---|---|
| 虚拟化 | KVM(VM) | 需要内核特权时的特殊运行时 | 有性能损失与额外负担,启动较慢 |
| 系统层容器 | LXC | 标准运行时 | 仅支持 Linux,禁止特权容器 |
| 应用层容器 | OCI | 服务运行时 | 常规 OCI 容器 |
| 配置项 | 要求 |
|---|---|
| 主机名 | DomainPrefix-Number,DomainPrefix 为联邦内唯一的本地域标识,Number 从 1 开始;例如 core0-1 |
| 根文件系统 | Btrfs,使用 raid1/10 作为数据冗余策略 |
| 登录方式 | 仅支持 SSH 密钥登录,禁止使用密码验证 |
| 操作系统 | Debian stable + Incus stable(https://github.com/zabbly/incus) |
| 时间同步 | Debian stable 默认通过 systemd-timesyncd 维持 UTC 同步,无需额外配置 NTP |
特指在 LXC 运行时里嵌套运行 OCI 容器。由于 lxcfs 仅为 LXC 模拟了 procfs 和 sysfs,但嵌套容器会绕过 lxcfs 直接读取宿主机内存容量。由于 Incus 已支持 OCI 调度,默认不允许嵌套;CI/CD 中使用 Kaniko 构建镜像为例外。
接口是最终暴露在计算设施中的数据入口,由存储服务接口与存储介质评级拼接:
| 字段 | 含义 | 取值 |
|---|---|---|
| 接口类型 | 数据入口语义 | bs:块设备;fs:文件系统;os:对象 |
| 介质 | 磁盘协议 | h:SAS/SATA HDD;s:SAS/SATA SSD;n:NVMe SSD |
| 容量 | 容量等级 | s:≤1T;m:1–4T;l:4–12T;e:>12T |
| 性能 | 性能等级 | h:更好;m:居中;l:最差(初始设备一般分配 l) |
| 拼接格式 | <接口类型>_<介质><容量><性能> | 例:fs_nml = 文件系统 / NVMe / 1–4T / 性能 l |
注意:集群必须保证各节点数据接口一致,保证集群可以重平衡实例,但本地存储不支持集群自愈合。
| 类型 | 访问特征 | 典型场景 | I/O 模式 |
|---|---|---|---|
| 热数据 | 高频访问,延迟敏感,吞吐量要求高 | 数据库、缓存、实时计算、在线服务 | 随机读写多,写密集 |
| 温数据 | 中等频率访问,延迟可容忍数十ms | 共享文件、CI/CD 产物、容器镜像、日志存储 | 顺序读写多,写较少 |
| 冷数据 | 低频访问,延迟不敏感,保留成本优先 | 备份、归档、合规保留、快照 | 极少读,几乎不写 |
| 策略 | 容错能力 | 驱动支持 | 容量 | 适用场景 | 主要缺点 |
|---|---|---|---|---|---|
| 多副本 | 允许 N-1 丢失 | Btrfs/TrueNAS/Ceph | 1/N | 热数据、延迟敏感、故障恢复要求快 | 存储利用率低 |
| RAID-Z | 允许 Z1/Z2 分别 1/2 盘丢失 | TrueNAS | Z1: N-1/N;Z2: N-2/N | 温/冷数据、大容量、写入频率低 | 写入性能差、重建慢且风险高 |
| 纠删码(EC) | 允许任意 M 块丢失 | Ceph | K/K+M | 大规模/大容量、读取多 | 写入有编码开销、小文件放大 |
| 底座 | 接口 | 适用规模 | 说明 |
|---|---|---|---|
| Btrfs | fs | 本地存储 | 节点本地提供 |
| TrueNAS | bs | 单机/小/中规模(3–6 节点) | 命名 nas;不支持双机 |
| Ceph | bs/fs/os | 大/超大规模(≥7 节点) | 命名 ceph-Number 或与计算设施同名;EC 4+2 起步 |
Ceph 架设方式:
ceph-NumberCeph 集群网络:使用独立的 IP 子网隔离,接入网口配置同网段静态 IP 且不设网关;可使用同一台交换机(无需 VLAN)或单独交换机,不依赖路由器。
本地域内会存在固有的两个网络模型:
| 带宽 | 数据设施需求 | 业务需求 | 推荐方案 |
|---|---|---|---|
| 1/2.5G | 小规模共享存储(1G 仅归档) | 标准业务,非 HPC/GPU | 电口(RJ45 + CAT6),无 RDMA,无光纤 |
| 10G | 中规模共享存储 | 标准业务,非 HPC/GPU | 光口(SFP+ + DAC)+ RoCEv2;不推荐 10G 电口 |
| ≥40G | 大/超大规模共享存储 | 轻量 HPC/GPU | 光口(QSFP+ + DAC)+ 强制 RoCEv2 |
注:
INTERFACE-Domain172.16.0.0/12eth0;VM 在需要 proxy 设备时可设置静态地址ACL 用于约束虚拟网络行为。
最终策略包含多个ACL规则的组合: * 例如只希望访问互联网:放行所有出入站流量,丢弃私网出入站流量(10.0.0.0/8、172.16.0.0/12、192.168.0.0/16),使实例只能访问互联网而不能互相访问/连接。
为了克服本地域权限模型重复、无公网设备互联难度大等问题,通过联邦枢纽设施构建联邦计算系统。
联邦设施包括:
联邦设施
├── 枢纽设施
│ ├── 数据库
│ ├── 认证设施
│ ├── 授权设施
│ └── 网络设施
├── 原生设施
│ ├── 联邦域名与证书服务
│ ├── 自托管Runner
│ └── 监控设施
└── 集成设施
├── 镜像仓库
├── 协作设施
└── 公告设施
枢纽设施不采用热备,而是采用可重建备份 + DNS 多端点策略来保证长期可用性。
仅用于支持联邦设施,不对业务开放。
通过统一的认证设施避免重复认证/自托管密钥库。
EOELAB 认证策略采用“平台原生凭证优先,外部 IDP 增强为辅”的并行模型:
Zitadel 提供的权限模型基于 Role 满足类似“准入门槛”的鉴权需求,提供两种级别:
Org User Permission Editor 权限。Org Owner 权限。Zitadel 仅支持 RBAC 权限模型,额外基于 OpenFGA 提供 ReBAC 权限模型。
.eoelab 作为仅供联邦网络内部使用的域名,节点自动获得 HOSTNAME.eoelab 记录| 组件 | endpoint | 框架 | 说明 |
|---|---|---|---|
| 控制节点 | https://hs.eoelab.org | Headscale | 禁用内置 DERP 服务器 |
| WebUI | https://hs.eoelab.org/admin | Headplane | |
| 中继节点 | derper | 基于客户端自动选择,直接使用 IP 连接 |
域名:fdcs.eoelab | Federation DNS & Cert Service
出于更新 TLS 证书/DNS 的需求,统一建立该设施,避免各自独立部署服务。
eoelab.org 及其子域名由 admin 团队维护,作为联邦公共域名向公网提供服务eoelab.org 子域名tag 策略:[size, arch, runtime]
| size | 内存 |
|---|---|
| tiny | 2–4G |
| small | 4–8G |
| medium | 8–16G |
| arch | runtime |
|---|---|
| amd64 | lxc:标准运行时,非特权,部分操作受限 |
| riscv64 | vm:全功能 runner,拥有特权内核 |
节点预装 git。优先考虑非特权方案:OCI 容器打包使用 kaniko,OCI 镜像操作使用 crane,拒绝 dind 和 docker 操作 registry。
tag 策略:[purpose],用于特定用途而非通用构建。例如 mirror:位于海外,负责镜像中国大陆无法访问的 OCI 镜像/软件包。
| 规格 | 数量 |
|---|---|
| tiny amd64 vm | 2 |
| medium amd64 lxc | 1 |
| mirror | 1 |
| 用途 | 框架 |
|---|---|
| 数据源 | VictoriaMetrics |
| 可视化 | Grafana |
| 日志 | VictoriaLogs |
| 告警 | Alertmanager |
使用官方仓库(images.linuxcontainers.org)。不在该仓库内的 OS 视同放弃。
使用阿里云容器镜像仓库(crpi-0fzeutaz68uv7lwt.cn-hangzhou.personal.cr.aliyuncs.com/NAMESPACE/REPO):
eoelab:自主构建的镜像,包括 cenv(EOELAB 标准运行时)upstream:同步的上游镜像OCI 仓库不公开密钥,所有操作通过 Codeberg 仓库的 Actions 完成。
EOELAB 使用 QQ 即时通信群组用于联邦协作:协调运维、通知故障/安全事件、日常交流。暂不考虑自建 Matrix。
域名:eoelab.codeberg.page
由 Codeberg CI 基于 Zine 框架自动构建并发布,用于发布社区公共通知、联邦规范与文档、服务端点/状态变更、基础设施/维护/安全事件公告。
我们暂不考虑自建邮件服务器或强行聚合为 NAME@eoelab.org。